Human fetal trachea samples collected on Apr3. v3 chemistry.

library(Seurat)
library(dplyr)
ZipF<-list.files(path=".",pattern="*.gz",full.names = T,recursive = T)
ZipF
library(plyr)
library(R.utils)
ldply(.data=ZipF, .fun=gunzip)  #This just unzips locally
##### First I manually changed all featurres.tsv to genes.tsv. Otherwise Read10X (Seurat v2) would not recognize.
# Load data
file_10Xdir_Hs<-c("GA21wk_v3","GA23wk_v3")
names(file_10Xdir_Hs)<-c("GA21wk_v3","GA23wk_v3")
Hs_Apr3_v3.data <- Read10X(data.dir = file_10Xdir_Hs)
dim(Hs_Apr3_v3.data)
26577 genes for HG38-plus
38892 “cells”/barcodes as filtered by Cell Ranger
Hs_GA2123_Trachea_v3@raw.data@Dim
[1] 22084 38892
head(Hs_GA2123_Trachea_v3@cell.names)
Hs_GA2123_Trachea_v3@data@Dim
[1] 22084  9693
cell_name<-read.table(text=Hs_GA2123_Trachea_v3@cell.names,sep="_",colClasses = "character")
age<-cell_name[,1]
names(age)<-Hs_GA2123_Trachea_v3@cell.names
Hs_GA2123_Trachea_v3<-AddMetaData(object = Hs_GA2123_Trachea_v3, metadata = age, col.name = "age")
table(Hs_GA2123_Trachea_v3@meta.data$age)

GA21wk GA23wk 
  7623   2070 
ribo.genes <- grep(pattern = "^RP[SL][[:digit:]]", x = rownames(x = Hs_GA2123_Trachea_v3@data), value = TRUE)
percent.ribo <- Matrix::colSums(Hs_GA2123_Trachea_v3@raw.data[ribo.genes, ])/Matrix::colSums(Hs_GA2123_Trachea_v3@raw.data)
Hs_GA2123_Trachea_v3 <- AddMetaData(object = Hs_GA2123_Trachea_v3, metadata = percent.ribo, col.name = "percent.ribo")
Hs_GA2123_Trachea_v3 <- NormalizeData(object = Hs_GA2123_Trachea_v3)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Hs_GA2123_Trachea_v3 <- ScaleData(object = Hs_GA2123_Trachea_v3)
Scaling data matrix

  |                                                                                                                                                                
  |                                                                                                                                                          |   0%
  |                                                                                                                                                                
  |=======                                                                                                                                                   |   4%
  |                                                                                                                                                                
  |=============                                                                                                                                             |   9%
  |                                                                                                                                                                
  |====================                                                                                                                                      |  13%
  |                                                                                                                                                                
  |===========================                                                                                                                               |  17%
  |                                                                                                                                                                
  |=================================                                                                                                                         |  22%
  |                                                                                                                                                                
  |========================================                                                                                                                  |  26%
  |                                                                                                                                                                
  |===============================================                                                                                                           |  30%
  |                                                                                                                                                                
  |======================================================                                                                                                    |  35%
  |                                                                                                                                                                
  |============================================================                                                                                              |  39%
  |                                                                                                                                                                
  |===================================================================                                                                                       |  43%
  |                                                                                                                                                                
  |==========================================================================                                                                                |  48%
  |                                                                                                                                                                
  |================================================================================                                                                          |  52%
  |                                                                                                                                                                
  |=======================================================================================                                                                   |  57%
  |                                                                                                                                                                
  |==============================================================================================                                                            |  61%
  |                                                                                                                                                                
  |====================================================================================================                                                      |  65%
  |                                                                                                                                                                
  |===========================================================================================================                                               |  70%
  |                                                                                                                                                                
  |==================================================================================================================                                        |  74%
  |                                                                                                                                                                
  |=========================================================================================================================                                 |  78%
  |                                                                                                                                                                
  |===============================================================================================================================                           |  83%
  |                                                                                                                                                                
  |======================================================================================================================================                    |  87%
  |                                                                                                                                                                
  |=============================================================================================================================================             |  91%
  |                                                                                                                                                                
  |===================================================================================================================================================       |  96%
  |                                                                                                                                                                
  |==========================================================================================================================================================| 100%
Hs_GA2123_Trachea_v3 <- FindVariableGenes(object = Hs_GA2123_Trachea_v3, do.plot = TRUE, x.low.cutoff=0.1,x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

Hs_GA2123_Trachea_v3 <- RunPCA(object = Hs_GA2123_Trachea_v3, do.print = FALSE)
Hs_GA2123_Trachea_v3 <- ProjectPCA(object = Hs_GA2123_Trachea_v3, do.print = FALSE)
PCHeatmap(object = Hs_GA2123_Trachea_v3, pc.use = 1:10, cells.use = 500, do.balanced = TRUE, label.columns = FALSE, num.genes = 25)

PCElbowPlot(object = Hs_GA2123_Trachea_v3)

n.pcs = 20
res.used <- 0.8
Hs_GA2123_Trachea_v3 <- FindClusters(object = Hs_GA2123_Trachea_v3, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Hs_GA2123_Trachea_v3 <- RunTSNE(object = Hs_GA2123_Trachea_v3, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2)

TSNEPlot(object = Hs_GA2123_Trachea_v3, do.label = F,group.by="age",pt.size = 0.1)

n.pcs = 20
res.used <- 1.0
Hs_GA2123_Trachea_v3 <- FindClusters(object = Hs_GA2123_Trachea_v3, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE,force.recalc=T)
Hs_GA2123_Trachea_v3 <- RunTSNE(object = Hs_GA2123_Trachea_v3, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=10)
TSNEPlot(object = Hs_GA2123_Trachea_v3, do.label = T,group.by="res.1")

Hs_GA2123_Trachea_v3<-SetAllIdent(Hs_GA2123_Trachea_v3,id="res.1")
GA2123wk_v3.res1.clust.markers <- FindAllMarkers(object = Hs_GA2123_Trachea_v3, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
GA2123wk_v3.res1.clust.markers %>% group_by(cluster) %>% top_n(20, avg_logFC)
write.table(GA2123wk_v3.res1.clust.markers,"GA2123wk_v3.res1.markers.txt",sep="\t")
Hs_v3_res1_8_18<-FindMarkers(Hs_GA2123_Trachea_v3,ident.1=c(8),ident.2=c(18),only.pos = F)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~04s          
   |++                                                | 3 % ~04s          
   |++                                                | 4 % ~03s          
   |+++                                               | 5 % ~03s          
   |++++                                              | 6 % ~03s          
   |++++                                              | 8 % ~03s          
   |+++++                                             | 9 % ~03s          
   |++++++                                            | 10% ~03s          
   |++++++                                            | 11% ~03s          
   |+++++++                                           | 13% ~03s          
   |+++++++                                           | 14% ~03s          
   |++++++++                                          | 15% ~03s          
   |+++++++++                                         | 16% ~03s          
   |+++++++++                                         | 18% ~03s          
   |++++++++++                                        | 19% ~03s          
   |+++++++++++                                       | 20% ~03s          
   |+++++++++++                                       | 22% ~03s          
   |++++++++++++                                      | 23% ~03s          
   |+++++++++++++                                     | 24% ~03s          
   |+++++++++++++                                     | 25% ~03s          
   |++++++++++++++                                    | 27% ~03s          
   |++++++++++++++                                    | 28% ~03s          
   |+++++++++++++++                                   | 29% ~02s          
   |++++++++++++++++                                  | 30% ~02s          
   |++++++++++++++++                                  | 32% ~02s          
   |+++++++++++++++++                                 | 33% ~02s          
   |++++++++++++++++++                                | 34% ~02s          
   |++++++++++++++++++                                | 35% ~02s          
   |+++++++++++++++++++                               | 37% ~02s          
   |+++++++++++++++++++                               | 38% ~02s          
   |++++++++++++++++++++                              | 39% ~02s          
   |+++++++++++++++++++++                             | 41% ~02s          
   |+++++++++++++++++++++                             | 42% ~02s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |+++++++++++++++++++++++                           | 44% ~02s          
   |+++++++++++++++++++++++                           | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |+++++++++++++++++++++++++                         | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~02s          
   |++++++++++++++++++++++++++                        | 52% ~02s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |++++++++++++++++++++++++++++                      | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 04s
Hs_v3_res1_8_18
Hs_v3_res1_2over1<-FindMarkers(Hs_GA2123_Trachea_v3,ident.1=c(2),ident.2=c(1),only.pos = T)

   |                                                  | 0 % ~calculating  
   |+                                                 | 2 % ~03s          
   |++                                                | 4 % ~03s          
   |+++                                               | 6 % ~03s          
   |++++                                              | 8 % ~03s          
   |+++++                                             | 10% ~03s          
   |++++++                                            | 12% ~02s          
   |+++++++                                           | 13% ~02s          
   |++++++++                                          | 15% ~02s          
   |+++++++++                                         | 17% ~02s          
   |++++++++++                                        | 19% ~02s          
   |+++++++++++                                       | 21% ~02s          
   |++++++++++++                                      | 23% ~02s          
   |+++++++++++++                                     | 25% ~02s          
   |++++++++++++++                                    | 27% ~02s          
   |+++++++++++++++                                   | 29% ~02s          
   |++++++++++++++++                                  | 31% ~02s          
   |+++++++++++++++++                                 | 33% ~02s          
   |++++++++++++++++++                                | 35% ~02s          
   |+++++++++++++++++++                               | 37% ~02s          
   |++++++++++++++++++++                              | 38% ~02s          
   |+++++++++++++++++++++                             | 40% ~02s          
   |++++++++++++++++++++++                            | 42% ~02s          
   |+++++++++++++++++++++++                           | 44% ~02s          
   |++++++++++++++++++++++++                          | 46% ~02s          
   |+++++++++++++++++++++++++                         | 48% ~01s          
   |+++++++++++++++++++++++++                         | 50% ~01s          
   |++++++++++++++++++++++++++                        | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 54% ~01s          
   |++++++++++++++++++++++++++++                      | 56% ~01s          
   |+++++++++++++++++++++++++++++                     | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 60% ~01s          
   |+++++++++++++++++++++++++++++++                   | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03s
Hs_v3_res1_2over1
Hs_v3_res1_21_20<-FindMarkers(Hs_GA2123_Trachea_v3,ident.1=c(21),ident.2=c(20),only.pos = T)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03s          
   |++                                                | 2 % ~03s          
   |++                                                | 3 % ~03s          
   |+++                                               | 4 % ~03s          
   |+++                                               | 5 % ~03s          
   |++++                                              | 6 % ~03s          
   |++++                                              | 7 % ~03s          
   |+++++                                             | 8 % ~03s          
   |+++++                                             | 9 % ~03s          
   |++++++                                            | 10% ~03s          
   |++++++                                            | 11% ~02s          
   |+++++++                                           | 12% ~02s          
   |+++++++                                           | 14% ~02s          
   |++++++++                                          | 15% ~02s          
   |++++++++                                          | 16% ~02s          
   |+++++++++                                         | 17% ~02s          
   |+++++++++                                         | 18% ~02s          
   |++++++++++                                        | 19% ~03s          
   |++++++++++                                        | 20% ~03s          
   |+++++++++++                                       | 21% ~03s          
   |+++++++++++                                       | 22% ~03s          
   |++++++++++++                                      | 23% ~03s          
   |++++++++++++                                      | 24% ~03s          
   |+++++++++++++                                     | 25% ~03s          
   |++++++++++++++                                    | 26% ~02s          
   |++++++++++++++                                    | 27% ~02s          
   |+++++++++++++++                                   | 28% ~02s          
   |+++++++++++++++                                   | 29% ~02s          
   |++++++++++++++++                                  | 30% ~02s          
   |++++++++++++++++                                  | 31% ~02s          
   |+++++++++++++++++                                 | 32% ~02s          
   |+++++++++++++++++                                 | 33% ~02s          
   |++++++++++++++++++                                | 34% ~02s          
   |++++++++++++++++++                                | 35% ~02s          
   |+++++++++++++++++++                               | 36% ~02s          
   |+++++++++++++++++++                               | 38% ~02s          
   |++++++++++++++++++++                              | 39% ~02s          
   |++++++++++++++++++++                              | 40% ~02s          
   |+++++++++++++++++++++                             | 41% ~02s          
   |+++++++++++++++++++++                             | 42% ~02s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |++++++++++++++++++++++                            | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |+++++++++++++++++++++++                           | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |++++++++++++++++++++++++                          | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |+++++++++++++++++++++++++                         | 50% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~02s          
   |+++++++++++++++++++++++++++                       | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |++++++++++++++++++++++++++++                      | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |+++++++++++++++++++++++++++++                     | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~01s          
   |++++++++++++++++++++++++++++++                    | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |+++++++++++++++++++++++++++++++                   | 60% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 64% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |++++++++++++++++++++++++++++++++++                | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03s
Hs_v3_res1_21_20
n.pcs = 20
res.used <- 1.2
Hs_GA2123_Trachea_v3 <- FindClusters(object = Hs_GA2123_Trachea_v3, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Build parameters exactly match those of already computed and stored SNN. To force recalculation, set force.recalc to TRUE.
Hs_GA2123_Trachea_v3 <- RunTSNE(object = Hs_GA2123_Trachea_v3, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=10)
TSNEPlot(object = Hs_GA2123_Trachea_v3, do.label = T,group.by="res.1.2")

n.pcs = 20
res.used <- 1.4
Hs_GA2123_Trachea_v3 <- FindClusters(object = Hs_GA2123_Trachea_v3, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Build parameters exactly match those of already computed and stored SNN. To force recalculation, set force.recalc to TRUE.
Hs_GA2123_Trachea_v3 <- RunTSNE(object = Hs_GA2123_Trachea_v3, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=10)
TSNEPlot(object = Hs_GA2123_Trachea_v3, do.label = T,group.by="res.1.4")

sum(is.na(Hs_GA2123_Trachea_v3@meta.data$doublet_score))
[1] 0
Hs_GA2123_Trachea_v3<-SetAllIdent(Hs_GA2123_Trachea_v3,id="age")
VlnPlot(object = Hs_GA2123_Trachea_v3, features.plot = c("doublet_score"), nCol = 1,group.by="res.1.4",point.size.use=0.3,ident.include = "GA21wk")

VlnPlot(object = Hs_GA2123_Trachea_v3, features.plot = c("SOX10","PHOX2A", "PHOX2B","CHGA","ASCL1","RET"), nCol = 1,group.by="res.1.4",point.size.use=0.3)
    DoHeatmap(object = Hs_GA2123_Trachea_v3, genes.use = c("EPCAM","TUBB3","SNAP25","ASCL1","CHGA","PHOX2A","PHOX2B","PLP1","MPZ"), 
    slim.col.label = TRUE, group.label.rot = TRUE,use.scaled = T,group.by="res.1.4",group.cex = 35,cex.row=25,cells.use = Hs_GA2123_Trachea_v3@cell.names[Hs_GA2123_Trachea_v3@meta.data$res.1.4 %in% c(10)]
  )
subset the Non-EPCAM cells:
Hs_GA2123_Trachea_v3 <- SetAllIdent(object = Hs_GA2123_Trachea_v3, id = "res.1.4")
Hs_GA2123_Trachea_v3_nonEpcam<-SubsetData(object=Hs_GA2123_Trachea_v3,ident.use=c(0:7,9:13,15,16,18,20:24))
table(Hs_GA2123_Trachea_v3_nonEpcam@meta.data$res.1.4)

  0   1  10  11  12  13  15  16  18   2  20  21  22  23  24   3   4   5   6   7   9 
937 862 405 401 370 351 316 290 248 825 189 121  90  88  65 550 481 476 461 447 414 
colnames(Hs_GA2123_Trachea_v3_nonEpcam@meta.data)[colnames(Hs_GA2123_Trachea_v3_nonEpcam@meta.data) == 'res.0.8'] <- 'orig.0.8'
colnames(Hs_GA2123_Trachea_v3_nonEpcam@meta.data)[colnames(Hs_GA2123_Trachea_v3_nonEpcam@meta.data) == 'res.1.4'] <- 'orig.1.4'
colnames(Hs_GA2123_Trachea_v3_nonEpcam@meta.data)[colnames(Hs_GA2123_Trachea_v3_nonEpcam@meta.data) == 'res.1.2'] <- 'orig.1.2'
Hs_GA2123_Trachea_v3_nonEpcam <- ScaleData(object = Hs_GA2123_Trachea_v3_nonEpcam)
Scaling data matrix

  |                                                                                                                                              
  |                                                                                                                                        |   0%
  |                                                                                                                                              
  |======                                                                                                                                  |   4%
  |                                                                                                                                              
  |============                                                                                                                            |   9%
  |                                                                                                                                              
  |==================                                                                                                                      |  13%
  |                                                                                                                                              
  |========================                                                                                                                |  17%
  |                                                                                                                                              
  |==============================                                                                                                          |  22%
  |                                                                                                                                              
  |===================================                                                                                                     |  26%
  |                                                                                                                                              
  |=========================================                                                                                               |  30%
  |                                                                                                                                              
  |===============================================                                                                                         |  35%
  |                                                                                                                                              
  |=====================================================                                                                                   |  39%
  |                                                                                                                                              
  |===========================================================                                                                             |  43%
  |                                                                                                                                              
  |=================================================================                                                                       |  48%
  |                                                                                                                                              
  |=======================================================================                                                                 |  52%
  |                                                                                                                                              
  |=============================================================================                                                           |  57%
  |                                                                                                                                              
  |===================================================================================                                                     |  61%
  |                                                                                                                                              
  |=========================================================================================                                               |  65%
  |                                                                                                                                              
  |===============================================================================================                                         |  70%
  |                                                                                                                                              
  |=====================================================================================================                                   |  74%
  |                                                                                                                                              
  |==========================================================================================================                              |  78%
  |                                                                                                                                              
  |================================================================================================================                        |  83%
  |                                                                                                                                              
  |======================================================================================================================                  |  87%
  |                                                                                                                                              
  |============================================================================================================================            |  91%
  |                                                                                                                                              
  |==================================================================================================================================      |  96%
  |                                                                                                                                              
  |========================================================================================================================================| 100%
Hs_GA2123_Trachea_v3_nonEpcam <- FindVariableGenes(object = Hs_GA2123_Trachea_v3_nonEpcam, do.plot = TRUE, x.low.cutoff=0.1,x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

run PCA on the set of genes
Hs_GA2123_Trachea_v3_nonEpcam <- RunPCA(object = Hs_GA2123_Trachea_v3_nonEpcam, do.print = FALSE)
#PCAPlot(Hs_GA2123_Trachea_v3_nonEpcam)
Hs_GA2123_Trachea_v3_nonEpcam <- ProjectPCA(object = Hs_GA2123_Trachea_v3_nonEpcam, do.print = F)
PCElbowPlot(object = Hs_GA2123_Trachea_v3_nonEpcam)

PCHeatmap(object = Hs_GA2123_Trachea_v3_nonEpcam, pc.use = 1:20, cells.use = 500, do.balanced = TRUE, label.columns = FALSE, num.genes = 25)

n.pcs = 20
res.used <- 0.8
Hs_GA2123_Trachea_v3_nonEpcam <- FindClusters(object = Hs_GA2123_Trachea_v3_nonEpcam, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Build parameters exactly match those of already computed and stored SNN. To force recalculation, set force.recalc to TRUE.Clustering parameters for resolution 0.8 exactly match those of already computed. 
  To force recalculation, set force.recalc to TRUE.
Hs_GA2123_Trachea_v3_nonEpcam <- RunTSNE(object = Hs_GA2123_Trachea_v3_nonEpcam, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=10)
TSNEPlot(object = Hs_GA2123_Trachea_v3_nonEpcam, do.label = T,group.by="res.0.8")

table(Hs_GA2123_Trachea_v3_nonEpcam@meta.data$orig.1.4,Hs_GA2123_Trachea_v3_nonEpcam@meta.data$res.0.8)
    
       0   1  10  11  12  13  14  15  16  17   2   3   4   5   6   7   8   9
  0  917  10   0   0   0   1   1   0   0   0   0   4   4   0   0   0   0   0
  1   13 739  65  18   5  10   0   0   0   0   0  11   0   0   0   1   0   0
  10   2   0   0   1   0   0   0   0   0   0   0   0   1   0   0   0   0 401
  11   0   0   0   1   1   0   0   1   0   0 396   0   0   0   1   1   0   0
  12   0   9   0 313  47   0   0   0   0   0   0   0   0   0   0   1   0   0
  13  11   5   1   0   3   0   0   0   0   0   0   0 329   1   0   1   0   0
  15   0  22 274   0   3   0   0   0   0   0   0  16   0   0   0   1   0   0
  16   0   9   5   4 256   0   1   0   0   0   0   0   0   0  13   0   2   0
  18   1  17   1   0   0 227   0   1   0   0   0   0   0   0   0   0   0   1
  2   15  37  30   0   0   0   0   0   0   0   0 743   0   0   0   0   0   0
  20   0   0   0   0   0   0   0   0   0   0   0   0   4 184   0   0   1   0
  21   5   0   0   0   0   0 115   0   0   0   0   0   0   0   0   1   0   0
  22   0   0   0   0   0   0   0   1  85   0   0   0   0   0   4   0   0   0
  23   0   0   0   0   0   0   0  88   0   0   0   0   0   0   0   0   0   0
  24   0   0   0   0   0   0   0   0   0  65   0   0   0   0   0   0   0   0
  3    0   0   0   0   0   0   0   0   1   0   0   0   0   0 542   7   0   0
  4    5   3   1   0   0   0   0   0   0   0   0   4   0   3   0 463   1   1
  5    1   4   1   1   2   1   0   3   5   0   0   1   1   0   6   1 449   0
  6    0   0   0   0   0   0   0   0   0   0   0   0   4 457   0   0   0   0
  7   19   0   0   0   0   0   0   0   0   0   0   0 414  12   0   1   1   0
  9    0   0   0   0   0   0   0   0   0   0 414   0   0   0   0   0   0   0
library(ggalluvial)
ggplot(data=Hs_GA2123_Trachea_v3_nonEpcam@meta.data,aes(axis1=orig.1.4,axis2=res.0.8))+geom_alluvium(aes(fill=res.0.8))+geom_stratum(width = 1/12, fill = "black", color = "grey") +geom_label(stat = "stratum", label.strata = TRUE)+scale_x_discrete(limits = c("orig.1.4", "res.0.8"), expand = c(.05, .05))

Now subset the basal, ciliated, and secretory:
Hs_GA2123_Trachea_v3 <- SetAllIdent(object = Hs_GA2123_Trachea_v3, id = "res.1.4")
Hs_GA2123_Trachea_v3_sub1<-SubsetData(object=Hs_GA2123_Trachea_v3,ident.use=c(8,14,19))
table(Hs_GA2123_Trachea_v3_sub1@meta.data$res.1.4)
colnames(Hs_GA2123_Trachea_v3_sub1@meta.data)[colnames(Hs_GA2123_Trachea_v3_sub1@meta.data) == 'res.0.8'] <- 'orig.0.8'
colnames(Hs_GA2123_Trachea_v3_sub1@meta.data)[colnames(Hs_GA2123_Trachea_v3_sub1@meta.data) == 'res.1.4'] <- 'orig.1.4'
colnames(Hs_GA2123_Trachea_v3_sub1@meta.data)[colnames(Hs_GA2123_Trachea_v3_sub1@meta.data) == 'res.1.2'] <- 'orig.1.2'
Hs_GA2123_Trachea_v3_sub1 <- ScaleData(object = Hs_GA2123_Trachea_v3_sub1)
Scaling data matrix

  |                                                                                                                     
  |                                                                                                               |   0%
  |                                                                                                                     
  |===============================================================================================================| 100%
Hs_GA2123_Trachea_v3_sub1 <- FindVariableGenes(object = Hs_GA2123_Trachea_v3_sub1, do.plot = TRUE, x.low.cutoff=0.1,x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

run PCA on the set of genes
Hs_GA2123_Trachea_v3_sub1 <- RunPCA(object = Hs_GA2123_Trachea_v3_sub1, do.print = FALSE)
#PCAPlot(Hs_GA2123_Trachea_v3_sub1)
Hs_GA2123_Trachea_v3_sub1 <- ProjectPCA(object = Hs_GA2123_Trachea_v3_sub1, do.print = F)
PCElbowPlot(object = Hs_GA2123_Trachea_v3_sub1)

PCHeatmap(object = Hs_GA2123_Trachea_v3_sub1, pc.use = 1:12, cells.use = 500, do.balanced = TRUE, label.columns = FALSE, num.genes = 25)

n.pcs = 16
res.used <- 0.8
Hs_GA2123_Trachea_v3_sub1 <- FindClusters(object = Hs_GA2123_Trachea_v3_sub1, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Hs_GA2123_Trachea_v3_sub1 <- RunTSNE(object = Hs_GA2123_Trachea_v3_sub1, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=10)
TSNEPlot(object = Hs_GA2123_Trachea_v3_sub1, do.label = T)

prop.table(table(Hs_GA2123_Trachea_v3_sub1@meta.data$age,Hs_GA2123_Trachea_v3_sub1@meta.data$res.0.8),1)
        
                  0          1          2          3          4          5          6          7
  GA21wk 0.18484848 0.20303030 0.08333333 0.16818182 0.19090909 0.06363636 0.06060606 0.04545455
  GA23wk 0.18333333 0.10000000 0.31111111 0.10833333 0.05277778 0.12500000 0.06388889 0.05555556
n.pcs = 16
res.used <- 1.2
Hs_GA2123_Trachea_v3_sub1 <- FindClusters(object = Hs_GA2123_Trachea_v3_sub1, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Build parameters exactly match those of already computed and stored SNN. To force recalculation, set force.recalc to TRUE.
Hs_GA2123_Trachea_v3_sub1 <- RunTSNE(object = Hs_GA2123_Trachea_v3_sub1, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=10)

Hs_v3_sub1_res1.2_c8over2_4<-FindMarkers(Hs_GA2123_Trachea_v3_sub1,ident.1=c(8),ident.2 = c(2,4),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~16s          
   |++                                                | 2 % ~10s          
   |++                                                | 4 % ~07s          
   |+++                                               | 5 % ~06s          
   |++++                                              | 6 % ~05s          
   |++++                                              | 8 % ~04s          
   |+++++                                             | 9 % ~04s          
   |+++++                                             | 10% ~04s          
   |++++++                                            | 11% ~03s          
   |+++++++                                           | 12% ~03s          
   |+++++++                                           | 14% ~03s          
   |++++++++                                          | 15% ~03s          
   |+++++++++                                         | 16% ~03s          
   |+++++++++                                         | 18% ~03s          
   |++++++++++                                        | 19% ~03s          
   |++++++++++                                        | 20% ~02s          
   |+++++++++++                                       | 21% ~02s          
   |++++++++++++                                      | 22% ~02s          
   |++++++++++++                                      | 24% ~02s          
   |+++++++++++++                                     | 25% ~02s          
   |++++++++++++++                                    | 26% ~02s          
   |++++++++++++++                                    | 28% ~02s          
   |+++++++++++++++                                   | 29% ~02s          
   |+++++++++++++++                                   | 30% ~02s          
   |++++++++++++++++                                  | 31% ~02s          
   |+++++++++++++++++                                 | 32% ~02s          
   |+++++++++++++++++                                 | 34% ~02s          
   |++++++++++++++++++                                | 35% ~02s          
   |+++++++++++++++++++                               | 36% ~02s          
   |+++++++++++++++++++                               | 38% ~02s          
   |++++++++++++++++++++                              | 39% ~02s          
   |++++++++++++++++++++                              | 40% ~02s          
   |+++++++++++++++++++++                             | 41% ~02s          
   |++++++++++++++++++++++                            | 42% ~02s          
   |++++++++++++++++++++++                            | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |++++++++++++++++++++++++                          | 46% ~01s          
   |++++++++++++++++++++++++                          | 48% ~01s          
   |+++++++++++++++++++++++++                         | 49% ~01s          
   |+++++++++++++++++++++++++                         | 50% ~01s          
   |++++++++++++++++++++++++++                        | 51% ~01s          
   |+++++++++++++++++++++++++++                       | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 54% ~01s          
   |++++++++++++++++++++++++++++                      | 55% ~01s          
   |+++++++++++++++++++++++++++++                     | 56% ~01s          
   |+++++++++++++++++++++++++++++                     | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |++++++++++++++++++++++++++++++                    | 60% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 64% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |++++++++++++++++++++++++++++++++++                | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02s
Hs_v3_sub1_res1.2_c8over2_4
library(plyr)
Hs_GA2123_Trachea_v3_sub1@meta.data$cell_type<-mapvalues(Hs_GA2123_Trachea_v3_sub1@meta.data$res.1.2,from=c("0","1","2","3","4","5","6","7","8"),to=c("Secretory_SMG","Ciliated","Basal_SE","Epcam_ECM","Basal_SE","Myoepithelial","Ciliated_Foxn4","Secretory_SE","Basal_SMG"))

to annotate Hs_GA2123_Trachea_v3
Hs_v3_type_sub1<-Hs_GA2123_Trachea_v3_sub1@meta.data$cell_type
names(Hs_v3_type_sub1)<-Hs_GA2123_Trachea_v3_sub1@cell.names
Hs_GA2123_Trachea_v3@meta.data$cell_type<-mapvalues(Hs_GA2123_Trachea_v3@meta.data$res.1,from=c("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22"),to=c("Fibroblast","Fibroblast","Fibroblast","VascularEndothelial","Fibroblast","Fibroblast","CyclingFibroblast","Fibroblast","Chondrocyte","Basal","Schwann/Neural","Fibroblast","Secretory","MesenchymalProgenitor","Stem","Fibroblast","Ciliated","Fibroblast","Chondrocyte","Immune","Muscle","Muscle","LymphaticEndothelial"))
Hs_GA2123_Trachea_v3<-AddMetaData(object = Hs_GA2123_Trachea_v3, metadata = Hs_v3_type_sub1, col.name = "specific_type")
table(Hs_GA2123_Trachea_v3@meta.data$specific_type)

      Basal_SE      Basal_SMG       Ciliated Ciliated_Foxn4      Epcam_ECM  Myoepithelial   Secretory_SE  Secretory_SMG 
           308             30            169             66            150             67             54            176 
Hs_GA2123_Trachea_v3@meta.data$specific_type <- ifelse(is.na(Hs_GA2123_Trachea_v3@meta.data$specific_type), as.character(Hs_GA2123_Trachea_v3@meta.data$cell_type), as.character(Hs_GA2123_Trachea_v3@meta.data$specific_type))
now we have annotation for all cells:
table(Hs_GA2123_Trachea_v3@meta.data$specific_type)

             Basal_SE             Basal_SMG           Chondrocyte              Ciliated        Ciliated_Foxn4     CyclingFibroblast 
                  308                    30                   650                   169                    66                   479 
            Epcam_ECM            Fibroblast                Immune  LymphaticEndothelial MesenchymalProgenitor                Muscle 
                  150                  5359                   121                    65                   316                   177 
        Myoepithelial        Schwann/Neural          Secretory_SE         Secretory_SMG                  Stem   VascularEndothelial 
                   67                   405                    54                   176                   286                   815 

print(levels(Hs_GA2123_Trachea_v3@ident))
 [1] "Basal_SE"              "Basal_SMG"             "Chondrocyte"           "Ciliated"              "Ciliated_Foxn4"       
 [6] "CyclingFibroblast"     "Epcam_ECM"             "Fibroblast"            "Immune"                "LymphaticEndothelial" 
[11] "MesenchymalProgenitor" "Muscle"                "Myoepithelial"         "Schwann/Neural"        "Secretory_SE"         
[16] "Secretory_SMG"         "Stem"                  "VascularEndothelial"  
Hs_GA2123_Trachea_v3<-SetAllIdent(object = Hs_GA2123_Trachea_v3, id = "specific_type")
Hs_GA2123_Trachea_v3@ident = factor(Hs_GA2123_Trachea_v3@ident,levels(Hs_GA2123_Trachea_v3@ident)[c(1,15,5,4,2,16,13,7,17,14,9,10,18,12,3,11,8,6)])

DotPlot(object = Hs_GA2123_Trachea_v3, cols.use = c("forestgreen","magenta3"),genes.plot = c("CFTR","ANO1","EPCAM","TP63","KRT5","FOXN4","SHISA8","MCIDAS","SNTN","CDHR3","FOXJ1","MUC16","SERPINB3","SOX9","KRT14","SOSTDC1","MUC5B","MUC5AC","SPDEF","LTF","LYZ","ACTA2","POU5F1","ESRG","SNAP25","CHGA","PLP1","MPZ","FCER1G","C1QA","PECAM1","LYVE1","MYH11","RGS5","NOTCH3","COL2A1","ACAN","WNT2","PI16","CD34","THY1","TWIST2","MKI67"),group.by = "ident", x.lab.rot = T,plot.legend = T,col.min = -2,col.max = 2)

df_Hs<-FetchData(Hs_GA2123_Trachea_v3,c("ANO1","CFTR","SERPINB3","MUC16","specific_type"))

For the purpose of visualization, we average within each specific cell type:
Hs_GA2123_Trachea_v3<-SetAllIdent(object = Hs_GA2123_Trachea_v3, id = "specific_type")
average_Hs_specific_Annotation<-AverageExpression(object = Hs_GA2123_Trachea_v3,return.seurat = T)
Finished averaging RNA for cluster Basal_SE
Finished averaging RNA for cluster Basal_SMG
Finished averaging RNA for cluster Chondrocyte
Finished averaging RNA for cluster Ciliated
Finished averaging RNA for cluster Ciliated_Foxn4
Finished averaging RNA for cluster CyclingFibroblast
Finished averaging RNA for cluster Epcam_ECM
Finished averaging RNA for cluster Fibroblast
Finished averaging RNA for cluster Immune
Finished averaging RNA for cluster LymphaticEndothelial
Finished averaging RNA for cluster MesenchymalProgenitor
Finished averaging RNA for cluster Muscle
Finished averaging RNA for cluster Myoepithelial
Finished averaging RNA for cluster Schwann/Neural
Finished averaging RNA for cluster Secretory_SE
Finished averaging RNA for cluster Secretory_SMG
Finished averaging RNA for cluster Stem
Finished averaging RNA for cluster VascularEndothelial
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Scaling data matrix

  |                                                                                                                     
  |                                                                                                               |   0%
  |                                                                                                                     
  |===============================================================================================================| 100%

save(Hs_GA2123_Trachea_v3_sub1,file="seurat_GA2123wk_v3_sub1.RData")
save(Hs_GA2123_Trachea_v3,file="seurat_GA2123wk_v3.RData")
load(file="seurat_GA2123wk_v3.RData")
LS0tCnRpdGxlOiAiSHNfQXByMyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQojIyMjIEh1bWFuIGZldGFsIHRyYWNoZWEgc2FtcGxlcyBjb2xsZWN0ZWQgb24gQXByMy4gdjMgY2hlbWlzdHJ5LgpgYGB7cn0KbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoZHBseXIpCmBgYApgYGB7cn0KWmlwRjwtbGlzdC5maWxlcyhwYXRoPSIuIixwYXR0ZXJuPSIqLmd6IixmdWxsLm5hbWVzID0gVCxyZWN1cnNpdmUgPSBUKQpaaXBGCmBgYApgYGB7cn0KbGlicmFyeShwbHlyKQpsaWJyYXJ5KFIudXRpbHMpCmxkcGx5KC5kYXRhPVppcEYsIC5mdW49Z3VuemlwKSAgI1RoaXMganVzdCB1bnppcHMgbG9jYWxseQpgYGAKCmBgYHtyfQojIyMjIyBGaXJzdCBJIG1hbnVhbGx5IGNoYW5nZWQgYWxsIGZlYXR1cnJlcy50c3YgdG8gZ2VuZXMudHN2LiBPdGhlcndpc2UgUmVhZDEwWCAoU2V1cmF0IHYyKSB3b3VsZCBub3QgcmVjb2duaXplLgojIExvYWQgZGF0YQpmaWxlXzEwWGRpcl9IczwtYygiR0EyMXdrX3YzIiwiR0EyM3drX3YzIikKbmFtZXMoZmlsZV8xMFhkaXJfSHMpPC1jKCJHQTIxd2tfdjMiLCJHQTIzd2tfdjMiKQpIc19BcHIzX3YzLmRhdGEgPC0gUmVhZDEwWChkYXRhLmRpciA9IGZpbGVfMTBYZGlyX0hzKQpgYGAKCmBgYHtyfQpkaW0oSHNfQXByM192My5kYXRhKQpgYGAKIyMjIyMgMjY1NzcgZ2VuZXMgZm9yIEhHMzgtcGx1cwojIyMjIyAzODg5MiAiY2VsbHMiL2JhcmNvZGVzIGFzIGZpbHRlcmVkIGJ5IENlbGwgUmFuZ2VyCgpgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjMgPC0gQ3JlYXRlU2V1cmF0T2JqZWN0KHJhdy5kYXRhID0gSHNfQXByM192My5kYXRhLCBtaW4uY2VsbHMgPSAxLCBtaW4uZ2VuZXMgPSAxLCAKICAgIHByb2plY3QgPSAiSHNfR0EyMTIzX1RyYWNoZWFfdjNjaGVtaXN0cnkiKQpIc19HQTIxMjNfVHJhY2hlYV92M0ByYXcuZGF0YUBEaW0KYGBgCmBgYHtyfQpoZWFkKEhzX0dBMjEyM19UcmFjaGVhX3YzQGNlbGwubmFtZXMpCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIEZpbHRlckNlbGxzKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBzdWJzZXQubmFtZXMgPSBjKCJuR2VuZSIsIm5VTUkiKSwgCiAgICBsb3cudGhyZXNob2xkcyA9IGMoMTAwMCw0MDAwKSwgaGlnaC50aHJlc2hvbGRzID0gYyhJbmYsSW5mKSkKSHNfR0EyMTIzX1RyYWNoZWFfdjNAZGF0YUBEaW0KYGBgCgpgYGB7cn0KY2VsbF9uYW1lPC1yZWFkLnRhYmxlKHRleHQ9SHNfR0EyMTIzX1RyYWNoZWFfdjNAY2VsbC5uYW1lcyxzZXA9Il8iLGNvbENsYXNzZXMgPSAiY2hhcmFjdGVyIikKYWdlPC1jZWxsX25hbWVbLDFdCm5hbWVzKGFnZSk8LUhzX0dBMjEyM19UcmFjaGVhX3YzQGNlbGwubmFtZXMKYGBgCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92MzwtQWRkTWV0YURhdGEob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIG1ldGFkYXRhID0gYWdlLCBjb2wubmFtZSA9ICJhZ2UiKQpgYGAKCmBgYHtyfQp0YWJsZShIc19HQTIxMjNfVHJhY2hlYV92M0BtZXRhLmRhdGEkYWdlKQpgYGAKCmBgYHtyfQpyaWJvLmdlbmVzIDwtIGdyZXAocGF0dGVybiA9ICJeUlBbU0xdW1s6ZGlnaXQ6XV0iLCB4ID0gcm93bmFtZXMoeCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzQGRhdGEpLCB2YWx1ZSA9IFRSVUUpCnBlcmNlbnQucmlibyA8LSBNYXRyaXg6OmNvbFN1bXMoSHNfR0EyMTIzX1RyYWNoZWFfdjNAcmF3LmRhdGFbcmliby5nZW5lcywgXSkvTWF0cml4Ojpjb2xTdW1zKEhzX0dBMjEyM19UcmFjaGVhX3YzQHJhdy5kYXRhKQpIc19HQTIxMjNfVHJhY2hlYV92MyA8LSBBZGRNZXRhRGF0YShvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgbWV0YWRhdGEgPSBwZXJjZW50LnJpYm8sIGNvbC5uYW1lID0gInBlcmNlbnQucmlibyIpCmBgYAoKYGBge3J9CmFnZ3JlZ2F0ZShIc19HQTIxMjNfVHJhY2hlYV92M0BtZXRhLmRhdGFbLCBjKDE6Miw1KV0sIGxpc3QoSHNfR0EyMTIzX1RyYWNoZWFfdjNAbWV0YS5kYXRhJGFnZSksIG1lZGlhbikKCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMpCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIFNjYWxlRGF0YShvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MykKYGBgCgpgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjMgPC0gRmluZFZhcmlhYmxlR2VuZXMob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGRvLnBsb3QgPSBUUlVFLCB4Lmxvdy5jdXRvZmY9MC4xLHguaGlnaC5jdXRvZmYgPSBJbmYsIHkuY3V0b2ZmID0gMC41KQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92MyA8LSBSdW5QQ0Eob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGRvLnByaW50ID0gRkFMU0UpCkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGRvLnByaW50ID0gRkFMU0UpCmBgYApgYGB7cixmaWcuaGVpZ2h0PTUwLGZpZy53aWR0aD0xNX0KUENIZWF0bWFwKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBwYy51c2UgPSAxOjEwLCBjZWxscy51c2UgPSA1MDAsIGRvLmJhbGFuY2VkID0gVFJVRSwgbGFiZWwuY29sdW1ucyA9IEZBTFNFLCBudW0uZ2VuZXMgPSAyNSkKCmBgYAoKYGBge3J9ClBDRWxib3dQbG90KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzKQpgYGAKCmBgYHtyfQpuLnBjcyA9IDIwCnJlcy51c2VkIDwtIDAuOAoKSHNfR0EyMTIzX1RyYWNoZWFfdjMgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6bi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYApgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjMgPC0gUnVuVFNORShvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgZGltcy51c2UgPSAxOm4ucGNzLCBzZWVkLnVzZSA9IDEwLCBwZXJwbGV4aXR5PTMwLCBkaW0uZW1iZWQgPSAyKQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGRvLmxhYmVsID0gVCxncm91cC5ieT0icmVzLjAuOCIscHQuc2l6ZSA9IDAuMikKCmBgYAoKYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBkby5sYWJlbCA9IEYsZ3JvdXAuYnk9ImFnZSIscHQuc2l6ZSA9IDAuMSkKYGBgCgpgYGB7cn0Kbi5wY3MgPSAyMApyZXMudXNlZCA8LSAxLjAKCkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSByZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFLGZvcmNlLnJlY2FsYz1UKQpgYGAKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIFJ1blRTTkUob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCwgZGltLmVtYmVkID0gMixrLnBhcmFtPTEwKQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGRvLmxhYmVsID0gVCxncm91cC5ieT0icmVzLjEiKQoKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTE1LGZpZy53aWR0aD02MH0KRG9IZWF0bWFwKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBnZW5lcy51c2UgPSBjKCJBTk8xIiwiQ0ZUUiIsIkVQQ0FNIiwiVFA2MyIsIkZPWEoxIiwiRk9YTjQiLCJTQ0dCMUExIiwiTFRGIiwiU05BUDI1IiwiQVNDTDEiLCJDSEdBIiwiUExQMSIsIk1QWiIsIlNPWDEwIiwiQzFRQSIsIkZDRVIxRyIsIlBFQ0FNMSIsIkxZVkUxIiwiUkdTNSIsIk5PVENIMyIsIkFDVEEyIiwiQUNURzIiLCJERVMiLCJQRExJTTMiLCJGR0wyIiwiUENESDciLCJNWUgxMSIsIkNPTDExQTEiLCJTT1g5IiwiU09YNSIsIlNPWDYiLCJDT0wyQTEiLCJBQ0FOIiwiU0VSUElORjEiLCJDT0wxQTEiLCJUSEJTMiIsIktFUkEiLCJEQ04iLCJMVU0iLCJDRDM0IiwiV05UMiIsIlRIWTEiLCJQSTE2IiwiQ0xFQzNCIiwiTUtJNjciLCJUT1AyQSIsIlRXSVNUMiIpLCAKICAgIHNsaW0uY29sLmxhYmVsID0gVFJVRSwgZ3JvdXAubGFiZWwucm90ID0gVFJVRSx1c2Uuc2NhbGVkID0gVCxncm91cC5ieT0icmVzLjEiLGdyb3VwLmNleCA9IDI1LGNleC5yb3c9MjUsZ3JvdXAub3JkZXIgPSBjKDksMTYsMTIsMTQsMTAsMTksMywyMiwyMCwyMSw1LDcsMTUsMTcsOCwxOCw0LDAsMiwxLDEzLDExLDYpCiAgKQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92MzwtU2V0QWxsSWRlbnQoSHNfR0EyMTIzX1RyYWNoZWFfdjMsaWQ9InJlcy4xIikKR0EyMTIzd2tfdjMucmVzMS5jbHVzdC5tYXJrZXJzIDwtIEZpbmRBbGxNYXJrZXJzKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCB0aHJlc2gudXNlID0gMC4yNSkKCmBgYAoKYGBge3J9CkdBMjEyM3drX3YzLnJlczEuY2x1c3QubWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKDIwLCBhdmdfbG9nRkMpCmBgYApgYGB7cn0Kd3JpdGUudGFibGUoR0EyMTIzd2tfdjMucmVzMS5jbHVzdC5tYXJrZXJzLCJHQTIxMjN3a192My5yZXMxLm1hcmtlcnMudHh0IixzZXA9Ilx0IikKCmBgYApgYGB7cn0KSHNfdjNfcmVzMV84XzE4PC1GaW5kTWFya2VycyhIc19HQTIxMjNfVHJhY2hlYV92MyxpZGVudC4xPWMoOCksaWRlbnQuMj1jKDE4KSxvbmx5LnBvcyA9IEYpCkhzX3YzX3JlczFfOF8xOApgYGAKCmBgYHtyfQpIc192M19yZXMxXzJvdmVyMTwtRmluZE1hcmtlcnMoSHNfR0EyMTIzX1RyYWNoZWFfdjMsaWRlbnQuMT1jKDIpLGlkZW50LjI9YygxKSxvbmx5LnBvcyA9IFQpCkhzX3YzX3JlczFfMm92ZXIxCmBgYAoKYGBge3J9CkhzX3YzX3JlczFfMjFfMjA8LUZpbmRNYXJrZXJzKEhzX0dBMjEyM19UcmFjaGVhX3YzLGlkZW50LjE9YygyMSksaWRlbnQuMj1jKDIwKSxvbmx5LnBvcyA9IFQpCkhzX3YzX3JlczFfMjFfMjAKYGBgCgpgYGB7cn0Kbi5wY3MgPSAyMApyZXMudXNlZCA8LSAxLjIKCkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSByZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFKQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92MyA8LSBSdW5UU05FKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBkaW1zLnVzZSA9IDE6bi5wY3MsIHNlZWQudXNlID0gMTAsIHBlcnBsZXhpdHk9MzAsIGRpbS5lbWJlZCA9IDIsay5wYXJhbT0xMCkKCmBgYAoKYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBkby5sYWJlbCA9IFQsZ3JvdXAuYnk9InJlcy4xLjIiKQoKYGBgCgpgYGB7cn0Kbi5wY3MgPSAyMApyZXMudXNlZCA8LSAxLjQKCkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSByZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFKQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92MyA8LSBSdW5UU05FKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBkaW1zLnVzZSA9IDE6bi5wY3MsIHNlZWQudXNlID0gMTAsIHBlcnBsZXhpdHk9MzAsIGRpbS5lbWJlZCA9IDIsay5wYXJhbT0xMCkKCmBgYAoKYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBkby5sYWJlbCA9IFQsZ3JvdXAuYnk9InJlcy4xLjQiKQoKYGBgCgpgYGB7cn0KbG9hZCgiR0EyMTIzd2tfYXByM192M19kb3VibGV0U2NvcmUuUkRhdGEiKQpIc19HQTIxMjNfVHJhY2hlYV92MzwtQWRkTWV0YURhdGEob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIG1ldGFkYXRhID0gR0EyMTIzd2tfYXByM192M19kb3VibGV0U2NvcmUsIGNvbC5uYW1lID0gImRvdWJsZXRfc2NvcmUiKQpzdW0oaXMubmEoSHNfR0EyMTIzX1RyYWNoZWFfdjNAbWV0YS5kYXRhJGRvdWJsZXRfc2NvcmUpKQpgYGAKCgpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0yMH0KSHNfR0EyMTIzX1RyYWNoZWFfdjM8LVNldEFsbElkZW50KEhzX0dBMjEyM19UcmFjaGVhX3YzLGlkPSJhZ2UiKQpWbG5QbG90KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBmZWF0dXJlcy5wbG90ID0gYygiZG91YmxldF9zY29yZSIpLCBuQ29sID0gMSxncm91cC5ieT0icmVzLjEuNCIscG9pbnQuc2l6ZS51c2U9MC4zLGlkZW50LmluY2x1ZGUgPSAiR0EyMXdrIikKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0yMH0KVmxuUGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgZmVhdHVyZXMucGxvdCA9IGMoImRvdWJsZXRfc2NvcmUiKSwgbkNvbCA9IDEsZ3JvdXAuYnk9InJlcy4xLjQiLHBvaW50LnNpemUudXNlPTAuMyxpZGVudC5pbmNsdWRlID0gIkdBMjN3ayIpCmBgYAoKYGBge3IsZmlnLmhlaWdodD0yMCxmaWcud2lkdGg9NjB9CkRvSGVhdG1hcChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgZ2VuZXMudXNlID0gYygiQU5PMSIsIkNGVFIiLCJFUENBTSIsIktSVDgiLCJLUlQxOCIsIlRQNjMiLCJLUlQ1IiwiS1JUMTQiLCJTT1NUREMxIiwiS1JUNCIsIktSVDEzIiwiU1BERUYiLCJDUkVCM0wxIiwiTVVDNUIiLCJGT1hKMSIsIkZPWE40IiwiU0hJU0E4IiwiTUNJREFTIiwiVFVCQjMiLCJTTkFQMjUiLCJBU0NMMSIsIkNIR0EiLCJQTFAxIiwiTVBaIiwiQzFRQSIsIkZDRVIxRyIsIkNEM0ciLCJQRUNBTTEiLCJOUlAxIiwiTFlWRTEiLCJSR1M1IiwiTk9UQ0gzIiwiQUNUQTIiLCJUQUdMTiIsIk1ZSDExIiwiQ09MOEExIiwiQ09MMTFBMSIsIlNPWDkiLCJDT0wyQTEiLCJBQ0FOIiwiTUlBIiwiRENOIiwiTFVNIiwiQ0QzNCIsIldOVDIiLCJUSFkxIiwiUEkxNiIsIkNMRUMzQiIsIlRLMSIsIk1LSTY3IiwiVE9QMkEiLCJBTEFTMiIpLCAKICAgIHNsaW0uY29sLmxhYmVsID0gVFJVRSwgZ3JvdXAubGFiZWwucm90ID0gVFJVRSx1c2Uuc2NhbGVkID0gVCxncm91cC5ieT0icmVzLjEuNCIsZ3JvdXAuY2V4ID0gMzUsY2V4LnJvdz0yNSxncm91cC5vcmRlciA9IGMoOCwxNCwxNywxOSwxMCwyMSw5LDExLDI0LDIyLDIzLDMsNSwxNiwxOCw2LDIwLDEzLDcsMCwxLDIsMTUsMTIsNCkKICApCmBgYAoKCmBgYHtyLGZpZy5oZWlnaHQ9MTUsIGZpZy53aWR0aD0yMH0KVmxuUGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgZmVhdHVyZXMucGxvdCA9IGMoIlNPWDEwIiwiUEhPWDJBIiwgIlBIT1gyQiIsIkNIR0EiLCJBU0NMMSIsIlJFVCIpLCBuQ29sID0gMSxncm91cC5ieT0icmVzLjEuNCIscG9pbnQuc2l6ZS51c2U9MC4zKQpgYGAKYGBge3IsZmlnLmhlaWdodD04LGZpZy53aWR0aD00MH0KICAgIERvSGVhdG1hcChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgZ2VuZXMudXNlID0gYygiRVBDQU0iLCJUVUJCMyIsIlNOQVAyNSIsIkFTQ0wxIiwiQ0hHQSIsIlBIT1gyQSIsIlBIT1gyQiIsIlBMUDEiLCJNUFoiKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuYnk9InJlcy4xLjQiLGdyb3VwLmNleCA9IDM1LGNleC5yb3c9MjUsY2VsbHMudXNlID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNAY2VsbC5uYW1lc1tIc19HQTIxMjNfVHJhY2hlYV92M0BtZXRhLmRhdGEkcmVzLjEuNCAlaW4lIGMoMTApXQogICkKYGBgCgojIyMjIyBzdWJzZXQgdGhlIE5vbi1FUENBTSBjZWxsczoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIFNldEFsbElkZW50KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBpZCA9ICJyZXMuMS40IikKSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW08LVN1YnNldERhdGEob2JqZWN0PUhzX0dBMjEyM19UcmFjaGVhX3YzLGlkZW50LnVzZT1jKDA6Nyw5OjEzLDE1LDE2LDE4LDIwOjI0KSkKdGFibGUoSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW1AbWV0YS5kYXRhJHJlcy4xLjQpCmBgYAoKYGBge3J9CmNvbG5hbWVzKEhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtQG1ldGEuZGF0YSlbY29sbmFtZXMoSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW1AbWV0YS5kYXRhKSA9PSAncmVzLjAuOCddIDwtICdvcmlnLjAuOCcKY29sbmFtZXMoSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW1AbWV0YS5kYXRhKVtjb2xuYW1lcyhIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbUBtZXRhLmRhdGEpID09ICdyZXMuMS40J10gPC0gJ29yaWcuMS40Jwpjb2xuYW1lcyhIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbUBtZXRhLmRhdGEpW2NvbG5hbWVzKEhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtQG1ldGEuZGF0YSkgPT0gJ3Jlcy4xLjInXSA8LSAnb3JpZy4xLjInCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtIDwtIFNjYWxlRGF0YShvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbSkKYGBgCgpgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0gPC0gRmluZFZhcmlhYmxlR2VuZXMob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0sIGRvLnBsb3QgPSBUUlVFLCB4Lmxvdy5jdXRvZmY9MC4xLHguaGlnaC5jdXRvZmYgPSBJbmYsIHkuY3V0b2ZmID0gMC41KQpgYGAKCiMjIyMjI3J1biBQQ0Egb24gdGhlIHNldCBvZiBnZW5lcwpgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0gPC0gUnVuUENBKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtLCBkby5wcmludCA9IEZBTFNFKQojUENBUGxvdChIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbSkKYGBgCgpgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0gPC0gUHJvamVjdFBDQShvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbSwgZG8ucHJpbnQgPSBGKQpgYGAKCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbSkKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9MzAsZmlnLndpZHRoPTE1fQpQQ0hlYXRtYXAob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0sIHBjLnVzZSA9IDE6MjAsIGNlbGxzLnVzZSA9IDUwMCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW5zID0gRkFMU0UsIG51bS5nZW5lcyA9IDI1KQoKYGBgCgpgYGB7cn0Kbi5wY3MgPSAyMApyZXMudXNlZCA8LSAwLjgKCkhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19ub25FcGNhbSwgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSByZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFLGZvcmNlLnJlY2FsYyA9IFQpCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtIDwtIFJ1blRTTkUob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0sIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCwgZGltLmVtYmVkID0gMixrLnBhcmFtPTEwKQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0sIGRvLmxhYmVsID0gVCxncm91cC5ieT0icmVzLjAuOCIpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9MjAsZmlnLndpZHRoPTYwfQpEb0hlYXRtYXAob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW0sIGdlbmVzLnVzZSA9IGMoIkFOTzEiLCJDRlRSIiwiVFVCQjMiLCJTTkFQMjUiLCJBU0NMMSIsIkNIR0EiLCJQTFAxIiwiTVBaIiwiQzFRQSIsIkZDRVIxRyIsIkNEM0ciLCJQRUNBTTEiLCJOUlAxIiwiTFlWRTEiLCJSR1M1IiwiTk9UQ0gzIiwiQUNUQTIiLCJUQUdMTiIsIk1ZSDExIiwiQ09MOEExIiwiQ09MMTFBMSIsIlNPWDkiLCJDT0wyQTEiLCJBQ0FOIiwiTUlBIiwiRENOIiwiTFVNIiwiQ0QzNCIsIldOVDIiLCJUSFkxIiwiUEkxNiIsIkNMRUMzQiIsIlRLMSIsIk1LSTY3IiwiVE9QMkEiLCJBRElQT1EiLCJDQVIzIiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMC44Iixncm91cC5jZXggPSAzNSxjZXgucm93PTI1LGdyb3VwLm9yZGVyID0gYyg5LDE0LDIsMTcsMTUsMTYsMTMsNiw4LDUsNCwwLDMsMSwxMCwxMSwxMiw3KQogICkKYGBgCgpgYGB7cn0KdGFibGUoSHNfR0EyMTIzX1RyYWNoZWFfdjNfbm9uRXBjYW1AbWV0YS5kYXRhJG9yaWcuMS40LEhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtQG1ldGEuZGF0YSRyZXMuMC44KQpgYGAKCgpgYGB7cn0KbGlicmFyeShnZ2FsbHV2aWFsKQpgYGAKYGBge3IsIGZpZy5oZWlnaHQ9OSwgZmlnLndpZHRoPTZ9CmdncGxvdChkYXRhPUhzX0dBMjEyM19UcmFjaGVhX3YzX25vbkVwY2FtQG1ldGEuZGF0YSxhZXMoYXhpczE9b3JpZy4xLjQsYXhpczI9cmVzLjAuOCkpK2dlb21fYWxsdXZpdW0oYWVzKGZpbGw9cmVzLjAuOCkpK2dlb21fc3RyYXR1bSh3aWR0aCA9IDEvMTIsIGZpbGwgPSAiYmxhY2siLCBjb2xvciA9ICJncmV5IikgK2dlb21fbGFiZWwoc3RhdCA9ICJzdHJhdHVtIiwgbGFiZWwuc3RyYXRhID0gVFJVRSkrc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJvcmlnLjEuNCIsICJyZXMuMC44IiksIGV4cGFuZCA9IGMoLjA1LCAuMDUpKQpgYGAKCiMjIyMjIE5vdyBzdWJzZXQgdGhlIGJhc2FsLCBjaWxpYXRlZCwgYW5kIHNlY3JldG9yeToKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzIDwtIFNldEFsbElkZW50KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBpZCA9ICJyZXMuMS40IikKSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMTwtU3Vic2V0RGF0YShvYmplY3Q9SHNfR0EyMTIzX1RyYWNoZWFfdjMsaWRlbnQudXNlPWMoOCwxNCwxOSkpCnRhYmxlKEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhJHJlcy4xLjQpCmBgYAoKYGBge3J9CmNvbG5hbWVzKEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhKVtjb2xuYW1lcyhIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxQG1ldGEuZGF0YSkgPT0gJ3Jlcy4wLjgnXSA8LSAnb3JpZy4wLjgnCmNvbG5hbWVzKEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhKVtjb2xuYW1lcyhIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxQG1ldGEuZGF0YSkgPT0gJ3Jlcy4xLjQnXSA8LSAnb3JpZy4xLjQnCmNvbG5hbWVzKEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhKVtjb2xuYW1lcyhIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxQG1ldGEuZGF0YSkgPT0gJ3Jlcy4xLjInXSA8LSAnb3JpZy4xLjInCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjEgPC0gU2NhbGVEYXRhKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjEpCmBgYAoKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjEgPC0gRmluZFZhcmlhYmxlR2VuZXMob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSwgZG8ucGxvdCA9IFRSVUUsIHgubG93LmN1dG9mZj0wLjEseC5oaWdoLmN1dG9mZiA9IEluZiwgeS5jdXRvZmYgPSAwLjUpCmBgYAoKIyMjIyMjcnVuIFBDQSBvbiB0aGUgc2V0IG9mIGdlbmVzCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxIDwtIFJ1blBDQShvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxLCBkby5wcmludCA9IEZBTFNFKQojUENBUGxvdChIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxKQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSwgZG8ucHJpbnQgPSBGKQpgYGAKCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxKQpgYGAKYGBge3IsZmlnLmhlaWdodD0zMCxmaWcud2lkdGg9MTV9ClBDSGVhdG1hcChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxLCBwYy51c2UgPSAxOjEyLCBjZWxscy51c2UgPSA1MDAsIGRvLmJhbGFuY2VkID0gVFJVRSwgbGFiZWwuY29sdW1ucyA9IEZBTFNFLCBudW0uZ2VuZXMgPSAyNSkKCmBgYAoKYGBge3J9Cm4ucGNzID0gMTYKcmVzLnVzZWQgPC0gMC44CgpIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxLCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6bi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYApgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSA8LSBSdW5UU05FKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjEsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCwgZGltLmVtYmVkID0gMixrLnBhcmFtPTEwKQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSwgZG8ubGFiZWwgPSBUKQoKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTIwLGZpZy53aWR0aD02MH0KRG9IZWF0bWFwKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjEsIGdlbmVzLnVzZSA9IGMoIlRQNjMiLCJLUlQxNSIsIktSVDUiLCJLUlQxNyIsIkZPWE40IiwiU0hJU0E4IiwiTUNJREFTIiwiU05UTiIsIkNESFIzIiwiRk9YSjEiLCJLUlQ0IiwiTVVDMSIsIk1VQzQiLCJNVUMyMCIsIlNFUlBJTkIzIiwiR1NUUDEiLCJBTE9YMTUiLCJDRDkiLCJNWUgxMSIsIkFDVEcyIiwiTVlMSyIsIlRBR0xOIiwiTFRGIiwiQVpHUDEiLCJETUJUMSIsIkZDR0JQIiwiQ0NMMjgiLCJBUVA1IiwiTVVDNUIiLCJTUERFRiIsIlJOQVNFMSIsIkxZWiIsIlRJTVAzIiwiT0dOIiwiQ09MMTRBMSIsIkJHTiIsIkNPTDExQTEiLCJMVU0iLCJBQ0FOIiwiQ0ZUUiIsIkFOTzEiLCJUQUNTVEQyIiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMC44Iixncm91cC5jZXggPSA2MCxjZXgucm93PTMwLGdyb3VwLm9yZGVyID0gYyg0LDIsNiwxLDcsNSwwLDMpCiAgKQpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9MTZ9CkRvdFBsb3Qob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSwgY29scy51c2UgPSBjKCJmb3Jlc3RncmVlbiIsIm1hZ2VudGEzIiksZ2VuZXMucGxvdCA9IGMoIlRQNjMiLCJLUlQxNSIsIktSVDUiLCJLUlQxNyIsIktSVDE0IiwiU09TVERDMSIsIkZPWEoxIiwiRk9YTjQiLCJTSElTQTgiLCJNQ0lEQVMiLCJTTlROIiwiQ0RIUjMiLCJDRkFQNTMiLCJDRVROMiIsIktSVDQiLCJLUlQxMyIsIk1VQzEiLCJNVUM0IiwiTVVDMTYiLCJNVUMyMCIsIlNFUlBJTkIzIiwiTVlIMTEiLCJBQ1RHMiIsIk1ZTEsiLCJBUE9FIiwiVEFHTE4iLCJMVEYiLCJBWkdQMSIsIkRNQlQxIiwiS0NOTjQiLCJGQ0dCUCIsIkxSUkMyNiIsIktSVDciLCJDQ0wyOCIsIkFRUDUiLCJNVUM1QiIsIlNQREVGIiwiTFlaIiwiVElNUDMiLCJPR04iLCJDT0wxNEExIiwiQkdOIiwiTUdQIiwiQ09MMTFBMSIsIkxVTSIsIkFDQU4iLCJDRlRSIiwiQU5PMSIpLGdyb3VwLmJ5ID0gImlkZW50IiwgeC5sYWIucm90ID0gVCxwbG90LmxlZ2VuZCA9IFQpCmBgYAoKYGBge3J9CnByb3AudGFibGUodGFibGUoSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMUBtZXRhLmRhdGEkYWdlLEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhJHJlcy4wLjgpLDEpCgpgYGAKCmBgYHtyfQpuLnBjcyA9IDE2CnJlcy51c2VkIDwtIDEuMgoKSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSwgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSByZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFKQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxIDwtIFJ1blRTTkUob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSwgZGltcy51c2UgPSAxOm4ucGNzLCBzZWVkLnVzZSA9IDEwLCBwZXJwbGV4aXR5PTMwLCBkaW0uZW1iZWQgPSAyLGsucGFyYW09MTApCgpgYGAKCmBgYHtyfQpUU05FUGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxLCBkby5sYWJlbCA9IFQsZ3JvdXAuYnk9InJlcy4xLjIiKQoKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTIwLGZpZy53aWR0aD02MH0KRG9IZWF0bWFwKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjEsIGdlbmVzLnVzZSA9IGMoIlRQNjMiLCJLUlQxNSIsIktSVDUiLCJLUlQxNyIsIktSVDE0IiwiU09TVERDMSIsIlNNT0MyIiwiU09YOSIsIkZPWE40IiwiU0hJU0E4IiwiTUNJREFTIiwiU05UTiIsIkNESFIzIiwiRk9YSjEiLCJLUlQ0IiwiTVVDMSIsIk1VQzQiLCJNVUMyMCIsIlNFUlBJTkIzIiwiR1NUUDEiLCJBTE9YMTUiLCJDRDkiLCJNWUgxMSIsIkFDVEcyIiwiTVlMSyIsIlRBR0xOIiwiTFRGIiwiQVpHUDEiLCJETUJUMSIsIkZDR0JQIiwiQ0NMMjgiLCJBUVA1IiwiTVVDNUIiLCJTUERFRiIsIlJOQVNFMSIsIkxZWiIsIlRJTVAzIiwiT0dOIiwiQ09MMTRBMSIsIkJHTiIsIkNPTDExQTEiLCJMVU0iLCJBQ0FOIiwiQ0ZUUiIsIkFOTzEiLCJUQUNTVEQyIiwiU0VSUElOQjQiLCJTRVJQSU5CMTMiLCJOUFBDIiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMS4yIixncm91cC5jZXggPSA2MCxjZXgucm93PTMwLGdyb3VwLm9yZGVyID0gYygyLDQsNiwxLDcsOCw1LDAsMykKICApCmBgYAoKYGBge3J9CkhzX3YzX3N1YjFfcmVzMS4yX2M4b3ZlcjJfNDwtRmluZE1hcmtlcnMoSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSxpZGVudC4xPWMoOCksaWRlbnQuMiA9IGMoMiw0KSxvbmx5LnBvcyA9IFRSVUUpCkhzX3YzX3N1YjFfcmVzMS4yX2M4b3ZlcjJfNApgYGAKCmBgYHtyfQpsaWJyYXJ5KHBseXIpCkhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhJGNlbGxfdHlwZTwtbWFwdmFsdWVzKEhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAbWV0YS5kYXRhJHJlcy4xLjIsZnJvbT1jKCIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiKSx0bz1jKCJTZWNyZXRvcnlfU01HIiwiQ2lsaWF0ZWQiLCJCYXNhbF9TRSIsIkVwY2FtX0VDTSIsIkJhc2FsX1NFIiwiTXlvZXBpdGhlbGlhbCIsIkNpbGlhdGVkX0ZveG40IiwiU2VjcmV0b3J5X1NFIiwiQmFzYWxfU01HIikpCmBgYAoKYGBge3IsZmlnLmhlaWdodD0zMCxmaWcud2lkdGg9NjB9CkRvSGVhdG1hcChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92M19zdWIxLCBnZW5lcy51c2UgPSBjKCJGT1hONCIsIlBMSzQiLCJTSElTQTgiLCJNQ0lEQVMiLCJTTlROIiwiQ0RIUjMiLCJGT1hKMSIsIlRQNjMiLCJLUlQxNSIsIktSVDUiLCJLUlQxNyIsIktSVDE0IiwiU09TVERDMSIsIlNNT0MyIiwiTlBQQyIsIktSVDQiLCJNVUMxIiwiTVVDNCIsIk1VQzIwIiwiU0VSUElOQjMiLCJTRVJQSU5CNCIsIlNFUlBJTkIxMyIsIkdTVFAxIiwiQUxPWDE1IiwiQ0Q5IiwiU09YOSIsIkxURiIsIkFRUDUiLCJMUlJDMjYiLCJBWkdQMSIsIkRNQlQxIiwiRkNHQlAiLCJDQ0wyOCIsIk1VQzVCIiwiU1BERUYiLCJSTkFTRTEiLCJMWVoiLCJNWUgxMSIsIkFDVEcyIiwiTVlMSyIsIlRBR0xOIiwiVElNUDMiLCJPR04iLCJDT0wxNEExIiwiQkdOIiwiQ09MMTFBMSIsIkxVTSIsIkFDQU4iLCJDRlRSIiwiQU5PMSIpLCAKICAgIHNsaW0uY29sLmxhYmVsID0gVFJVRSwgZ3JvdXAubGFiZWwucm90ID0gVFJVRSx1c2Uuc2NhbGVkID0gVCxncm91cC5ieT0iY2VsbF90eXBlIixncm91cC5jZXggPSA2MCxjZXgucm93PTMwLGdyb3VwLm9yZGVyID0gYygiQ2lsaWF0ZWRfRm94bjQiLCJDaWxpYXRlZCIsIkJhc2FsX1NFIiwiU2VjcmV0b3J5X1NFIiwiQmFzYWxfU01HIiwiU2VjcmV0b3J5X1NNRyIsIk15b2VwaXRoZWxpYWwiLCJFcGNhbV9FQ00iKSwKICApCmBgYAoKIyMjIyMgdG8gYW5ub3RhdGUgSHNfR0EyMTIzX1RyYWNoZWFfdjMKYGBge3J9CkhzX3YzX3R5cGVfc3ViMTwtSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMUBtZXRhLmRhdGEkY2VsbF90eXBlCm5hbWVzKEhzX3YzX3R5cGVfc3ViMSk8LUhzX0dBMjEyM19UcmFjaGVhX3YzX3N1YjFAY2VsbC5uYW1lcwpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92M0BtZXRhLmRhdGEkY2VsbF90eXBlPC1tYXB2YWx1ZXMoSHNfR0EyMTIzX1RyYWNoZWFfdjNAbWV0YS5kYXRhJHJlcy4xLGZyb209YygiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiksdG89YygiRmlicm9ibGFzdCIsIkZpYnJvYmxhc3QiLCJGaWJyb2JsYXN0IiwiVmFzY3VsYXJFbmRvdGhlbGlhbCIsIkZpYnJvYmxhc3QiLCJGaWJyb2JsYXN0IiwiQ3ljbGluZ0ZpYnJvYmxhc3QiLCJGaWJyb2JsYXN0IiwiQ2hvbmRyb2N5dGUiLCJCYXNhbCIsIlNjaHdhbm4vTmV1cmFsIiwiRmlicm9ibGFzdCIsIlNlY3JldG9yeSIsIk1lc2VuY2h5bWFsUHJvZ2VuaXRvciIsIlN0ZW0iLCJGaWJyb2JsYXN0IiwiQ2lsaWF0ZWQiLCJGaWJyb2JsYXN0IiwiQ2hvbmRyb2N5dGUiLCJJbW11bmUiLCJNdXNjbGUiLCJNdXNjbGUiLCJMeW1waGF0aWNFbmRvdGhlbGlhbCIpKQpgYGAKCmBgYHtyfQpIc19HQTIxMjNfVHJhY2hlYV92MzwtQWRkTWV0YURhdGEob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIG1ldGFkYXRhID0gSHNfdjNfdHlwZV9zdWIxLCBjb2wubmFtZSA9ICJzcGVjaWZpY190eXBlIikKYGBgCmBgYHtyfQp0YWJsZShIc19HQTIxMjNfVHJhY2hlYV92M0BtZXRhLmRhdGEkc3BlY2lmaWNfdHlwZSkKYGBgCgpgYGB7cn0KSHNfR0EyMTIzX1RyYWNoZWFfdjNAbWV0YS5kYXRhJHNwZWNpZmljX3R5cGUgPC0gaWZlbHNlKGlzLm5hKEhzX0dBMjEyM19UcmFjaGVhX3YzQG1ldGEuZGF0YSRzcGVjaWZpY190eXBlKSwgYXMuY2hhcmFjdGVyKEhzX0dBMjEyM19UcmFjaGVhX3YzQG1ldGEuZGF0YSRjZWxsX3R5cGUpLCBhcy5jaGFyYWN0ZXIoSHNfR0EyMTIzX1RyYWNoZWFfdjNAbWV0YS5kYXRhJHNwZWNpZmljX3R5cGUpKQpgYGAKCiMjIyMjIG5vdyB3ZSBoYXZlIGFubm90YXRpb24gZm9yIGFsbCBjZWxsczoKYGBge3J9CnRhYmxlKEhzX0dBMjEyM19UcmFjaGVhX3YzQG1ldGEuZGF0YSRzcGVjaWZpY190eXBlKQpgYGAKCgpgYGB7cixmaWcuaGVpZ2h0PTIwLGZpZy53aWR0aD02MH0KRG9IZWF0bWFwKG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBnZW5lcy51c2UgPSBjKCJDRlRSIiwiQU5PMSIsIkVQQ0FNIiwiVFA2MyIsIktSVDUiLCJGT1hONCIsIlNISVNBOCIsIk1DSURBUyIsIlNOVE4iLCJDREhSMyIsIkZPWEoxIiwiTVVDMTYiLCJNVUMxIiwiTVVDNCIsIk1VQzIwIiwiU0VSUElOQjMiLCJDRDkiLCJLUlQxNCIsIlNPU1REQzEiLCJNVUM1QiIsIlNQREVGIiwiUk5BU0UxIiwiTFlaIiwiU05BUDI1IiwiQVNDTDEiLCJQTFAxIiwiTVBaIiwiRkNFUjFHIiwiQzFRQSIsIlBFQ0FNMSIsIkxZVkUxIiwiQUNUQTIiLCJSR1M1IiwiTk9UQ0gzIiwiU09YOSIsIkNPTDJBMSIsIkFDQU4iLCJXTlQyIiwiVEhZMSIsIlRXSVNUMiIsIk1LSTY3IiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixncm91cC5jZXggPSAzMCxjZXgucm93PTMwLGdyb3VwLm9yZGVyID0gYygiQmFzYWxfU0UiLCJDaWxpYXRlZF9Gb3huNCIsIkNpbGlhdGVkIiwiU2VjcmV0b3J5X1NFIiwiQmFzYWxfU01HIiwiU2VjcmV0b3J5X1NNRyIsIk15b2VwaXRoZWxpYWwiLCJFcGNhbV9FQ00iLCJTdGVtIiwiU2Nod2Fubi9OZXVyYWwiLCJJbW11bmUiLCJWYXNjdWxhckVuZG90aGVsaWFsIiwiTHltcGhhdGljRW5kb3RoZWxpYWwiLCJNdXNjbGUiLCJDaG9uZHJvY3l0ZSIsIk1lc2VuY2h5bWFsUHJvZ2VuaXRvciIsIkZpYnJvYmxhc3QiLCJDeWNsaW5nRmlicm9ibGFzdCIpCiAgKQpgYGAKCmBgYHtyfQpwcmludChsZXZlbHMoSHNfR0EyMTIzX1RyYWNoZWFfdjNAaWRlbnQpKQpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NixmaWcud2lkdGg9MTJ9CkhzX0dBMjEyM19UcmFjaGVhX3YzPC1TZXRBbGxJZGVudChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgaWQgPSAic3BlY2lmaWNfdHlwZSIpCkhzX0dBMjEyM19UcmFjaGVhX3YzQGlkZW50ID0gZmFjdG9yKEhzX0dBMjEyM19UcmFjaGVhX3YzQGlkZW50LGxldmVscyhIc19HQTIxMjNfVHJhY2hlYV92M0BpZGVudClbYygxLDE1LDUsNCwyLDE2LDEzLDcsMTcsMTQsOSwxMCwxOCwxMiwzLDExLDgsNildKQoKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTUsZmlnLndpZHRoPTEyfQpEb3RQbG90KG9iamVjdCA9IEhzX0dBMjEyM19UcmFjaGVhX3YzLCBjb2xzLnVzZSA9IGMoImxpZ2h0Z3JheSIsInJlZCIpLGdlbmVzLnBsb3QgPSBjKCJDRlRSIiwiQU5PMSIsIkVQQ0FNIiwiVFA2MyIsIkZPWE40IiwiU0hJU0E4IiwiTUNJREFTIiwiU05UTiIsIkNESFIzIiwiRk9YSjEiLCJNVUMxNiIsIlNFUlBJTkIzIiwiU09YOSIsIktSVDE0IiwiU09TVERDMSIsIk1VQzVCIiwiU1BERUYiLCJMVEYiLCJMWVoiLCJBQ1RBMiIsIlBPVTVGMSIsIkVTUkciLCJTTkFQMjUiLCJDSEdBIiwiUExQMSIsIk1QWiIsIkZDRVIxRyIsIkMxUUEiLCJQRUNBTTEiLCJMWVZFMSIsIk1ZSDExIiwiUkdTNSIsIk5PVENIMyIsIkNPTDJBMSIsIkFDQU4iLCJXTlQyIiwiQ0QzNCIsIlRIWTEiLCJUV0lTVDIiLCJNS0k2NyIpLGdyb3VwLmJ5ID0gImlkZW50IiwgeC5sYWIucm90ID0gVCxwbG90LmxlZ2VuZCA9IFQpCmBgYAoKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0xNH0KRG90UGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgY29scy51c2UgPSBjKCJmb3Jlc3RncmVlbiIsIm1hZ2VudGEzIiksZ2VuZXMucGxvdCA9IGMoIkNGVFIiLCJBTk8xIiwiRVBDQU0iLCJUUDYzIiwiS1JUNSIsIkZPWE40IiwiU0hJU0E4IiwiTUNJREFTIiwiU05UTiIsIkNESFIzIiwiRk9YSjEiLCJNVUMxNiIsIlNFUlBJTkIzIiwiU09YOSIsIktSVDE0IiwiU09TVERDMSIsIk1VQzVCIiwiTVVDNUFDIiwiU1BERUYiLCJMVEYiLCJMWVoiLCJBQ1RBMiIsIlBPVTVGMSIsIkVTUkciLCJTTkFQMjUiLCJDSEdBIiwiUExQMSIsIk1QWiIsIkZDRVIxRyIsIkMxUUEiLCJQRUNBTTEiLCJMWVZFMSIsIk1ZSDExIiwiUkdTNSIsIk5PVENIMyIsIkNPTDJBMSIsIkFDQU4iLCJXTlQyIiwiUEkxNiIsIkNEMzQiLCJUSFkxIiwiVFdJU1QyIiwiTUtJNjciKSxncm91cC5ieSA9ICJpZGVudCIsIHgubGFiLnJvdCA9IFQscGxvdC5sZWdlbmQgPSBULGNvbC5taW4gPSAtMixjb2wubWF4ID0gMikKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTYsZmlnLndpZHRoPTh9CkRvdFBsb3Qob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMsIGNvbHMudXNlID0gYygiZm9yZXN0Z3JlZW4iLCJtYWdlbnRhMyIpLGdlbmVzLnBsb3QgPSBjKCJGT1hKMSIsIkxURiIsIlRQNjMiLCJXTlQyIiwiUEkxNiIsIkNMRUMzQiIsIkVQQ0FNIiwiVEVSQyIsIlRFUlQiLCJDTERONiIsIlBPVTVGMSIsIkxJTjI4QSIsIkVTUkciLCJMMVREMSIsIkRQUEE0IiwiVVRGMSIsIkZPWEQzLUFTMSIsIkNSQUJQMSIsIlRIWTEiLCJUVUJCMkIiLCJVQ0hMMSIsIlRVQkIzIiwiU05BUDI1IiwiUExQMSIpLGdyb3VwLmJ5ID0gImlkZW50IiwgeC5sYWIucm90ID0gVCxwbG90LmxlZ2VuZCA9IFQpCmBgYAoKYGBge3J9CmRmX0hzPC1GZXRjaERhdGEoSHNfR0EyMTIzX1RyYWNoZWFfdjMsYygiQU5PMSIsIkNGVFIiLCJTRVJQSU5CMyIsIk1VQzE2Iiwic3BlY2lmaWNfdHlwZSIpKQoKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9MTB9CmdncGxvdChkZl9IcyxhZXMoc3BlY2lmaWNfdHlwZSxDRlRSKSkrZ2VvbV9kb3RwbG90KGJpbmF4aXM9InkiLGFlcyhmaWxsPXNwZWNpZmljX3R5cGUpLGJpbndpZHRoPTAuMDUsc3RhY2tkaXI9ImNlbnRlciIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC44KSwgZG90c2l6ZT0wLjAxOCkrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsaGp1c3Q9MSkpKyBzdGF0X3N1bW1hcnkoYWVzKGNvbG9yPXNwZWNpZmljX3R5cGUpLGZ1bi5kYXRhPW1lYW5fc2RsLCBmdW4uYXJncyA9IGxpc3QobXVsdD0xKSwgCiAgICAgICAgICAgICAgICAgZ2VvbT0icG9pbnRyYW5nZSIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC43KSkKYGBgCgpgYGB7cixmaWcud2lkdGg9MTAsZmlnLmhlaWdodD02fQpUU05FUGxvdChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgZG8ubGFiZWwgPSBGLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixwdC5zaXplID0gMC4zKStzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInICwgJyM4MDgwODAnLCcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyMwMDgwODAnLCAnI2U2YmVmZicsICcjOWE2MzI0JywgJyNmYWJlYmUnLCAgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywnI2ZmZDhiMScsICcjMDAwMDc1JywgJyNmNTgyMzEnLCAnIzAwMDAwMCcsJyNmZmZhYzgnCikpCgpgYGAKCiMjIyMjIEZvciB0aGUgcHVycG9zZSBvZiB2aXN1YWxpemF0aW9uLCB3ZSBhdmVyYWdlIHdpdGhpbiBlYWNoIHNwZWNpZmljIGNlbGwgdHlwZToKYGBge3J9CkhzX0dBMjEyM19UcmFjaGVhX3YzPC1TZXRBbGxJZGVudChvYmplY3QgPSBIc19HQTIxMjNfVHJhY2hlYV92MywgaWQgPSAic3BlY2lmaWNfdHlwZSIpCmF2ZXJhZ2VfSHNfc3BlY2lmaWNfQW5ub3RhdGlvbjwtQXZlcmFnZUV4cHJlc3Npb24ob2JqZWN0ID0gSHNfR0EyMTIzX1RyYWNoZWFfdjMscmV0dXJuLnNldXJhdCA9IFQpCmBgYAoKYGBge3IsZmlnLmhlaWdodD0xNSxmaWcud2lkdGg9MTV9CgpEb0hlYXRtYXAob2JqZWN0ID0gYXZlcmFnZV9Ic19zcGVjaWZpY19Bbm5vdGF0aW9uLCBnZW5lcy51c2UgPSBjKCJFUENBTSIsIlRQNjMiLCJLUlQ1IiwiRk9YTjQiLCJTSElTQTgiLCJNQ0lEQVMiLCJTTlROIiwiQ0RIUjMiLCJGT1hKMSIsIk1VQzE2IiwiU0VSUElOQjMiLCJTT1g5IiwiS1JUMTQiLCJTT1NUREMxIiwiTVVDNUIiLCJNVUM1QUMiLCJTUERFRiIsIkxURiIsIkxZWiIsIkFDVEEyIiwiTVlIMTEiLCJQT1U1RjEiLCJFU1JHIiwiU05BUDI1IiwiQVNDTDEiLCJDSEdBIiwiUExQMSIsIk1QWiIsIkZDRVIxRyIsIkMxUUEiLCJQRUNBTTEiLCJMWVZFMSIsIlJHUzUiLCJOT1RDSDMiLCJDT0wyQTEiLCJBQ0FOIiwiV05UMiIsIlBJMTYiLCJDRDM0IiwiVEhZMSIsIlRXSVNUMiIsIk1LSTY3IiwiQ0ZUUiIsIkFOTzEiKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuY2V4ID0gMzAsY2V4LnJvdz0yMCxncm91cC5vcmRlciA9IGMoIkJhc2FsX1NFIiwiQmFzYWxfU01HIiwiQ2lsaWF0ZWRfRm94bjQiLCJDaWxpYXRlZCIsIlNlY3JldG9yeV9TRSIsCiAiU2VjcmV0b3J5X1NNRyIsICJNeW9lcGl0aGVsaWFsIiwiRXBjYW1fRUNNIiwiU3RlbSIsIlNjaHdhbm4vTmV1cmFsIiwiSW1tdW5lIiwiTHltcGhhdGljRW5kb3RoZWxpYWwiLCJWYXNjdWxhckVuZG90aGVsaWFsIiwiTXVzY2xlIiwiQ2hvbmRyb2N5dGUiLCJNZXNlbmNoeW1hbFByb2dlbml0b3IiLCJGaWJyb2JsYXN0IiwiQ3ljbGluZ0ZpYnJvYmxhc3QiKSkKYGBgCgoKYGBge3J9CnNhdmUoSHNfR0EyMTIzX1RyYWNoZWFfdjNfc3ViMSxmaWxlPSJzZXVyYXRfR0EyMTIzd2tfdjNfc3ViMS5SRGF0YSIpCmBgYApgYGB7cn0Kc2F2ZShIc19HQTIxMjNfVHJhY2hlYV92MyxmaWxlPSJzZXVyYXRfR0EyMTIzd2tfdjMuUkRhdGEiKQpgYGAKYGBge3J9CmxvYWQoZmlsZT0ic2V1cmF0X0dBMjEyM3drX3YzLlJEYXRhIikKYGBgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=